<?php
header("content-type:text/html;charset=utf-8");
$link = @mysql_connect('localhost','root','123456') or die("链接数据库失败");
if(mysql_errno()){    //判断是否链接成功  mysql_error(); 返回数据操作的错误信息
  echo '链接数据库失败'.mysql_error();   //mysql_error(); 返回数据操作的错误信息
  exit();
}

mysql_select_db('test');

mysql_set_charset('utf8');

// 四：准备sql语句
$sql = "select * from a";

$result = mysql_query($sql);
while ($row = mysql_fetch_assoc($result)) {
    print_r($row);
}

内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行。
外联接。外联接可以是左向外联接、右向外联接或完整外部联接。    
LEFT   JOIN   或   LEFT   OUTER   JOIN。  
RIGHT   JOIN   或   RIGHT   OUTER   JOIN。    
FULL   JOIN   或   FULL   OUTER   JOIN。  
交叉联接。    


where(条件查询)、having（筛选）、group by（分组）、order by（排序）、limit（限制结果数）
================================================================
drop table if exists a;
create table a(
  `id` int(11) unsigned NOT NULL auto_increment, 
  `name` varchar(30) NOT NULL,
  PRIMARY KEY  (`id`)
)ENGINE=MyISAM  DEFAULT CHARSET=utf8;
insert into a (name) values ('one'),('two'),('three');

drop table if exists b;
create table b(
  `id` int(11) unsigned NOT NULL auto_increment, 
  `job` varchar(200) NOT NULL,
  `uid` int NOT NULL,
  PRIMARY KEY  (`id`)
)ENGINE=MyISAM  DEFAULT CHARSET=utf8;
insert into b (job,uid) values ('23',1),('34',2),('34',4),('23',1),('34',2);

// ========(左连接,右连接,全连接,内连接,交叉连接,自连接)===========
JOIN             等价于   INNER JOIN                 内连接（典型的联接运算，使用像   =   或   <>   之类的比较运算符）
LEFT JOIN     等价于   LEFT  OUTER   JOIN     左链接
RIGHT JOIN   等价于   RIGHT OUTER   JOIN   右链接
mysql不支持  FULL JOIN                FULL OUTER JOIN

// 内连接   =========================两边值相同====
select   a.*,b.*   from   a   inner   join   b  on  a.id=b.uid; 
select *  from a join b on a.id = b.uid;    
select * from a, b where a.id = b.uid;   //三个是等价的。

// 左连接  =========================左表为准===== 如果右边的表没有数据就用 null  代替
select   a.*,b.*   from   a   left   join   b     on   a.id=b.uid ;
select   a.*,b.*   from   a    LEFT   OUTER   JOIN   b     on   a.id=b.uid ;

 // 右连接  =========================右表为准========如果左边的表没有数据就用 null  代替
select   a.*,b.*   from   a   right   join   b     on   a.id=b.uid  ;
select   a.*,b.*   from   a    RIGHT   OUTER   JOIN   b     on   a.id=b.uid ;

// =========================== exists() ================================
// exists()中返回的只有TRUE和FALSE,过滤使用。过滤使用。
select * from a where exists(select * from b where a.id=b.uid); 

// ==========================mysql 级联============================
ON DELETE、ON UPDATE     表示事件触发限制，可设参数：
RESTRICT（限制外表中的外键改动）
CASCADE（跟随外键改动）
SET NULL（设空值）
SET DEFAULT（设默认值）
NO ACTION（无动作，默认的）

drop table if exists subtb;
drop table if exists roottb;
CREATE TABLE `roottb` (
  `id` INT(11) UNSIGNED AUTO_INCREMENT NOT NULL,
  `data` VARCHAR(100) NOT NULL DEFAULT '',
  PRIMARY KEY (`id`)
) TYPE=InnoDB;

drop table if exists subtb;
CREATE TABLE `subtb` (
  `id` INT(11) UNSIGNED AUTO_INCREMENT NOT NULL,
  `rootid` INT(11) UNSIGNED NOT NULL DEFAULT '0',
  `data` VARCHAR(100) NOT NULL DEFAULT '',
  PRIMARY KEY (`id`),
  INDEX (`rootid`),  # 外键必须加索引。
# foreign 外部的  references  证明 标记 征求    cascade  串联    constraint   强制；限制；约束 （可加可不加，看情况）
# constraint FOREIGN KEY (`rootid`) REFERENCES roottb(`id`) ON DELETE CASCADE
# FOREIGN KEY (`rootid`) REFERENCES roottb(`id`) ON DELETE CASCADE
FOREIGN KEY (`rootid`) REFERENCES roottb(`id`) ON UPDATE CASCADE
) TYPE=InnoDB;

INSERT INTO `roottb` (`id`,`data`) VALUES ('1', 'test root line 1'),('2', 'test root line 2'),('3', 'test root line 3');
  INSERT INTO `subtb` (`id`,`rootid`,`data`) VALUES ('1', '1', 'test sub line 1 for root 1'),('2', '1', 'test sub line 2 for root 1'),('3', '1', 'test sub line 3 for root 1'),('4', '2', 'test sub line 1 for root 2'),('5', '2', 'test sub line 2 for root 2'),('6', '2', 'test sub line 3 for root 2'),('7', '3', 'test sub line 1 for root 3'),('8', '3', 'test sub line 2 for root 3'),('9', '3', 'test sub line 3 for root 3');

 delete from `roottb` where `id`='2';
 update roottb set data='abc' where id=2;
 select * from `roottb`;
 select * from `subtb`;


// drop table if exists c;
// create table c (
//   `id` int(11) unsigned NOT NULL auto_increment, 
//   name varchar(30),
//   groupid int,
//   primary key (id),
// foreign key (groupid) references a(id) on delete cascade 
// )ENGINE=MyISAM DEFAULT CHARSET=utf8;
// insert into a (name) values ('Group1'),('Group2');    on update cascade
// insert into a (name) values ('Group1');

// 　　insert into a values("111","1");

// 　　insert into a values("222","2");


//  CREATE TABLE `dage` (
//   `id` int(11) NOT NULL auto_increment,
//    `name` varchar(32) default '',
//    PRIMARY KEY  (`id`)
//  ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

//  CREATE TABLE `xiaodi` (
//   `id` int(11) NOT NULL auto_increment,
//   `dage_id` int(11) default NULL,
//   `name` varchar(32) default '',
//   PRIMARY KEY  (`id`),
//   KEY `dage_id` (`dage_id`),
//   CONSTRAINT `xiaodi_ibfk_1` FOREIGN KEY (`dage_id`) REFERENCES `dage` (`id`)
// ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
//  insert into dage(name) values('铜锣湾');
//  select * from dage;
//  select * from xiaodi;


//  delete from dage where id=1;
//   insert into xiaodi(dage_id,name) values(2,'旺角_小弟A');
// alter table xiaodi drop foreign key xiaodi_ibfk_1; 
// alter table xiaodi add foreign key(dage_id) references dage(id) on delete cascade on update cascade;
//  delete from dage where id=1;
// select * from dage;


